Telegram Group & Telegram Channel
⚙️ Как проверить, что WeakReference «отпустила» объект

В .NET слабые ссылки позволяют ссылаться на объект, не препятствуя сборщику мусора его удалить. Это полезно в кэшах, пулах объектов и других случаях, где важно избегать утечек памяти.

Но как проверить, что объект удаляется?

Можно использовать пример:
class MyObject
{
~MyObject()
{
Console.WriteLine("MyObject был удалён сборщиком мусора");
}
}

class Program
{
static void Main()
{
WeakReference weakRef = test();

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

Console.WriteLine("После сборки мусора: " + (weakRef.IsAlive ? "Жив" : "Удалён"));
}

static WeakReference test() {
var obj = new MyObject();
WeakReference weakRef = new WeakReference(obj);
Console.WriteLine("До удаления ссылки: " + (weakRef.IsAlive ? "Жив" : "Удалён"));
return weakRef;
}
}


IsAlive показывает, жив ли объект.

GC.Collect() + GC.WaitForPendingFinalizers() заставляют сборщик мусора немедленно освободить неиспользуемые объекты.

• Деструктор ~MyObject() позволяет наглядно убедиться, что объект удалён.

Метод IsAlive может показывать, что объект жив даже после GC.Collect(), если объект ещё не финализирован или находится в очереди на финализацию.

Для надёжности можно использовать TryGetTarget вместо IsAlive.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM



tg-me.com/csharpproglib/5856
Create:
Last Update:

⚙️ Как проверить, что WeakReference «отпустила» объект

В .NET слабые ссылки позволяют ссылаться на объект, не препятствуя сборщику мусора его удалить. Это полезно в кэшах, пулах объектов и других случаях, где важно избегать утечек памяти.

Но как проверить, что объект удаляется?

Можно использовать пример:

class MyObject
{
~MyObject()
{
Console.WriteLine("MyObject был удалён сборщиком мусора");
}
}

class Program
{
static void Main()
{
WeakReference weakRef = test();

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

Console.WriteLine("После сборки мусора: " + (weakRef.IsAlive ? "Жив" : "Удалён"));
}

static WeakReference test() {
var obj = new MyObject();
WeakReference weakRef = new WeakReference(obj);
Console.WriteLine("До удаления ссылки: " + (weakRef.IsAlive ? "Жив" : "Удалён"));
return weakRef;
}
}


IsAlive показывает, жив ли объект.

GC.Collect() + GC.WaitForPendingFinalizers() заставляют сборщик мусора немедленно освободить неиспользуемые объекты.

• Деструктор ~MyObject() позволяет наглядно убедиться, что объект удалён.

Метод IsAlive может показывать, что объект жив даже после GC.Collect(), если объект ещё не финализирован или находится в очереди на финализацию.

Для надёжности можно использовать TryGetTarget вместо IsAlive.

🐸Библиотека шарписта #буст

BY Библиотека шарписта | C#, F#, .NET, ASP.NET




Share with your friend now:
tg-me.com/csharpproglib/5856

View MORE
Open in Telegram


Библиотека шарписта | C F NET ASP NET Telegram | DID YOU KNOW?

Date: |

Tata Power whose core business is to generate, transmit and distribute electricity has made no money to investors in the last one decade. That is a big blunder considering it is one of the largest power generation companies in the country. One of the reasons is the company's huge debt levels which stood at ₹43,559 crore at the end of March 2021 compared to the company’s market capitalisation of ₹44,447 crore.

Among the actives, Ascendas REIT sank 0.64 percent, while CapitaLand Integrated Commercial Trust plummeted 1.42 percent, City Developments plunged 1.12 percent, Dairy Farm International tumbled 0.86 percent, DBS Group skidded 0.68 percent, Genting Singapore retreated 0.67 percent, Hongkong Land climbed 1.30 percent, Mapletree Commercial Trust lost 0.47 percent, Mapletree Logistics Trust tanked 0.95 percent, Oversea-Chinese Banking Corporation dropped 0.61 percent, SATS rose 0.24 percent, SembCorp Industries shed 0.54 percent, Singapore Airlines surrendered 0.79 percent, Singapore Exchange slid 0.30 percent, Singapore Press Holdings declined 1.03 percent, Singapore Technologies Engineering dipped 0.26 percent, SingTel advanced 0.81 percent, United Overseas Bank fell 0.39 percent, Wilmar International eased 0.24 percent, Yangzijiang Shipbuilding jumped 1.42 percent and Keppel Corp, Thai Beverage, CapitaLand and Comfort DelGro were unchanged.

Библиотека шарписта | C F NET ASP NET from kr


Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET
FROM USA